package com.bai.boot.Controller;

import com.bai.boot.Util.JsonResult;
import com.bai.boot.service.ex.*;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;
import javax.sql.rowset.serial.SerialException;

/**
 * 表示控制层中的基类
 * 异常捕获
 * @author 27471
 * Time : 2022/9/30 20:42
 */
@Component
public class BaseController {



    //表示操作成功的状态码
    public static final int OK = 200;

    /**
     * 请求处理方法，方法返回值就是需要传递给前端的数据
     * 自动将异常对象传递给此方法的传递列表上
     * 当前项目中产生了异常，就被统一拦截到此方法，这个方法此时就充当的是请求方法，方法的返回值直接给到前端
     */
    @ExceptionHandler(ServiceExption.class)//用于统一处理抛出的异常
    public JsonResult<Void> handleExption(Throwable e) {
        JsonResult<Void> result = new JsonResult<>();
        if (e instanceof UsernameDuplicatedException) {
            result.setState(4000);
            result.setMessage("用户名被占用");

        }else if (e instanceof UserNotExistException) {
            result.setState(5001);
            result.setMessage("用户数据不存在");
        }else if (e instanceof OriginalPasswordNotMatchException) {
            result.setState(5002);
            result.setMessage("密码错误");
        }else if (e instanceof InsertExption) {
            result.setState(5000);
            result.setMessage("注册时产生未知异常");
        }else if (e instanceof UpdateException) {
            result.setState(5003);
            result.setMessage("更新数据时产生未知的异常");
        }
        return result;
    }

    /**
     * 获取session对象的uid
     * @param session
     * @return
     */
    public final Integer getUidFromSession(HttpSession session){
       return Integer.valueOf(session.getAttribute("uid").toString());
    }

    /**
     * 获取session对象的username
     * @param session
     * @return
     */
    public final String getUsenameFromSession(HttpSession session){
       return session.getAttribute("username").toString();
    }
}
